#include <head.h>

void sighandler_t(int sig)
{
    printf("你发送的信号是 %d \n", sig);
    if (sig == SIGINT)
    {
        exit(1);
    }
}
int main(int argc, char const *argv[])
{
    // 创建信号集
    sigset_t set;
    sigset_t oset;

    // 初始化信号集
    sigemptyset(&set);

    // 在信号集中 添加 信号
    sigaddset(&set, SIGINT);
    sigaddset(&set, SIGUSR1);
    sigaddset(&set, SIGUSR2);

    // 注册 信号处理方法
    struct sigaction my_sig_str;

    // 清空 结构体
    memset(&my_sig_str, 0, sizeof(my_sig_str));

    my_sig_str.sa_handler = sighandler_t; // 使用常规函数
    my_sig_str.sa_flags = SA_RESTART;     // 使用复位方法

    sigaction(SIGINT, &my_sig_str, NULL);  // 注册信号 对相应的信号 进行处理
    sigaction(SIGUSR1, &my_sig_str, NULL); // 注册信号 对相应的信号 进行处理
    sigaction(SIGUSR2, &my_sig_str, NULL); // 注册信号 对相应的信号 进行处理

    // 开始阻塞信号
    sigprocmask(SIG_BLOCK, &set, &oset);
    // 从 set  中获取 阻塞那些信息  如果在阻塞的过程中 有信号输入 则由 oset 来接收

    printf("开始阻塞\n");

    sleep(5);

    printf("阻塞结束\n");

    // 解除阻塞
    sigprocmask(SIG_UNBLOCK, &set, &oset);

    while (1)
    {
        sleep(1);
    }

    return 0;
}
